/**
 * @file bsp_led.c
 * @author your name (you@domain.com)
 * @brief
 * @version 0.1
 * @date 2023-03-20
 *
 * @copyright Copyright (c) 2023
 *
 */

#include "bsp_led.h"

static uint32_t GPIO_PORT[LEDn] = {LED0_GPIO_PORT};
static uint32_t GPIO_PIN[LEDn] = {LED0_PIN};

static rcu_periph_enum GPIO_CLK[LEDn] = {LED0_GPIO_CLK};

void bsp_InitLed(led_typedef_enum lednum)
{
    /* enable the led clock */
    rcu_periph_clock_enable(GPIO_CLK[lednum]);
    /* configure led GPIO port */
    gpio_init(GPIO_PORT[lednum], GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN[lednum]);
    bsp_LedOff(lednum);
}

void bsp_LedOn(led_typedef_enum lednum)
{
    GPIO_BOP(GPIO_PORT[lednum]) = GPIO_PIN[lednum];
}

void bsp_LedOff(led_typedef_enum lednum)
{
    GPIO_BC(GPIO_PORT[lednum]) = GPIO_PIN[lednum];
}

void bsp_LedToggle(led_typedef_enum lednum)
{
    gpio_bit_write(GPIO_PORT[lednum], GPIO_PIN[lednum],
                   (bit_status)(1 - gpio_input_bit_get(GPIO_PORT[lednum], GPIO_PIN[lednum])));
}
